/**
 * 和Java中的List一样
 */
void main(){
  List<String> name = ['Alice', 'Bob', 'Charlie'];
  name[1] = 'Tom';
  print(name[1]);
  // for each遍历
  for(var item in name){
    print(item);
  }
  print("--------------");

  // 当然还可以不指定类型
  var t2 = [1,2.2,333, 'FUCK']; // 注意，此时的类型为Object
  List<Object> t21 =  [1,2.2,333, 'FUCK'];


  // 编译时常量列表，修改时会报错
  // List<int> numbers = const[1,2,3,4,5];
  // numbers[0] = 1; // 运行时抛出异常


  // 常用方法
  // length   获取List中元素的个数
  //
  // isEmpty    判断列表是否为空
  //
  // isNotEmpty   判断列表是否不为空
  //
  // add(E element)   向列表末尾添加一个元素
  //
  // addAll(Iterable<E> elements)   向列表末尾添加一个可迭代的集合中的所有元素
  //
  // insert(int index, E element)  在指定索引处插入一个元素
  //
  // remove(E element)  移除列表中第一个匹配指定值的元素
  //
  // removeAt(int index)    移除指定索引处的元素
  //
  // removeLast() 移除列表中的最后一个元素
  //
  // removeRange(int start, int end)   移除列表中指定范围的元素
  //
  // removeWhere(bool f(E element))   根据指定条件移除列表中的元素
  List<String> l1 = ["五月", "五月", "七月","六月"];
  l1.removeWhere( (e) => e=='六月');

  // retainWhere(bool f(E element))  根据指定条件保留列表中的元素
  //
  // clear()   移除列表中的所有元素
  //
  // contains(E element)   判断列表中是否包含指定元素
  //
  // forEach(void f(E element))   对列表中的每个元素执行指定操作
  name.forEach( (String a){
    print(a);
  });
  // 类型可以省略
  name.forEach( (a){
    print(a);
  });



  //
  // map(T f(E element))   对列表中的每个元素执行指定的转换操作，并返回转换后的结果
  //
  // sort(int f(E element1, E element2))   对列表中的元素进行排序
  //
  // sublist(int start, [int end])   获取列表中指定范围的子列表
  //
  // toList()     将可迭代对象转换为列表
  //
  // join(String separator)     将列表中的元素连接成一个字符串
  //
  // indexOf(E element, [int start])       返回列表中第一次出现指定元素的索引
  //
  // lastIndexOf(E element, [int start])   返回列表中最后一次出现指定元素的索引
}